package com.chatroom.client.ui;

import com.chatroom.client.model.ChatMessage;
import javax.swing.*;
import java.awt.*;
import java.util.Map;

/**
 * 【优化版】组合头像和聊天气泡的面板。
 * 核心优化: 使用 Box.createHorizontalGlue() 来实现气泡的自适应宽度，而不是拉伸气泡。
 */
public class MessagePanel extends JPanel {

    public MessagePanel(ChatMessage message, int listWidth, ImageIcon avatar, Map<String, ImageIcon> emojiCache) {
        super(new GridBagLayout());
        setOpaque(false);

        JLabel avatarLabel = new JLabel(avatar);
        // BubblePanel 的创建保持不变，它已经可以自适应内容了
        BubblePanel bubblePanel = new BubblePanel(message, listWidth, emojiCache);

        GridBagConstraints gbc = new GridBagConstraints();
        gbc.gridy = 0;
        gbc.anchor = GridBagConstraints.NORTH; // 垂直方向顶部对齐

        if (message.isMine()) {
            // 我的消息： [弹簧] [气泡] [头像]
            gbc.insets = new Insets(0, 0, 5, 5);

            // [MODIFIED] 1. 添加一个水平弹簧 (Glue)，它会占据所有多余空间
            gbc.gridx = 0;
            gbc.weightx = 1.0; // 让弹簧有伸缩权重
            add(Box.createHorizontalGlue(), gbc);

            // [MODIFIED] 2. 气泡不再拉伸
            gbc.gridx = 1;
            gbc.weightx = 0; // 气泡没有伸缩权重
            gbc.fill = GridBagConstraints.NONE; // 不填充
            add(bubblePanel, gbc);

            // 3. 头像
            gbc.gridx = 2;
            gbc.insets = new Insets(0, 0, 5, 10); // 右边距稍大
            add(avatarLabel, gbc);

        } else {
            // 他人消息： [头像] [气泡] [弹簧]
            gbc.insets = new Insets(0, 10, 5, 0); // 左边距稍大

            // 1. 头像
            gbc.gridx = 0;
            add(avatarLabel, gbc);

            // [MODIFIED] 2. 气泡不再拉伸
            gbc.gridx = 1;
            gbc.weightx = 0;
            gbc.fill = GridBagConstraints.NONE;
            gbc.insets = new Insets(0, 5, 5, 0);
            add(bubblePanel, gbc);

            // [MODIFIED] 3. 添加一个水平弹簧，占据右侧所有多余空间
            gbc.gridx = 2;
            gbc.weightx = 1.0; // 让弹簧有伸缩权重
            add(Box.createHorizontalGlue(), gbc);
        }
    }
}
